/*
 * Analisador.h
 *
 *  Created on: 24/11/2011
 *      Author: Arthur Holanda
 */

#ifndef ANALISADOR_H_
#define ANALISADOR_H_

#include "Combinacao.h"
#include "Carta.h"
#include "Mao.h"

#define MAX_CARTAS 7

class Analisador {
public:
	Analisador();
	virtual ~Analisador();
	Combinacao* GetCombinacaoN(Mao* maoJogador, Mao* maoMesa);

protected:
	bool HasOnePair();
	bool HasTwoPairs();
	bool HasThreeOfAKind();
	bool HasStraight();
	bool HasFlush();
	bool HasFullHouse();
	bool HasFourOfAKind();
	bool HasStraightFlush();
	bool HasRoyalStraightFlush();

	ArrayList* GetCartasOnePair();
	ArrayList* GetCartasTwoPairs();
	ArrayList* GetCartasThreeOfAKind();
	ArrayList* GetCartasStraight();
	ArrayList* GetCartasFlush();
	ArrayList* GetCartasFullHouse();
	ArrayList* GetCartasFourOfAKind();
	ArrayList* GetCartasStraightFlush();
	ArrayList* GetCartasRoyalStraightFlush();

	Carta* GetHighCard();

	Carta* cartas[MAX_CARTAS];

	Mao* mao;
	Mao* mesa;

	int numCartas;
private:
    void AgruparCartas();
    bool TemMesmoNaipe(Carta *c1, Carta *c2, Carta *c3, Carta *c4, Carta *c5);
    bool TemCarta(int numero, int naipe);
    bool FormaSequencia(Carta *c1, Carta *c2, Carta *c3, Carta *c4, Carta *c5);
    bool FormaStraightFlush(Carta *c1, Carta *c2, Carta *c3, Carta *c4, Carta *c5);
    int NumeroCartasComNumero(int numero);
    int NumeroCartasComNaipe(int naipe);
    void OrdenaCartas();
};

#endif /* ANALISADOR_H_ */
